/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sistema.aplicacao;

import com.sistema.db.Banco;
import com.sistema.tools.Md5;
import java.awt.event.*;
import java.sql.ResultSet;
import javax.swing.*;


/**
 *
 * @author geraldo
 */
public class FormLogin extends JFrame
{

    private JPanel pnlLogin;
    private JTextField txtUsuario;
    private JPasswordField txtSenha;
    private JButton btnLogar;
    private JButton btnCancelar;
    private String login;
    private String senha;
    private boolean loginAutomatico = false;

    public FormLogin()
    {

        setTitle( "Controle de Ligações Suporte" );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        setSize( 500, 250 );
        setLocationRelativeTo( null );
        setResizable( false );
        iniciaComponentes();
        setVisible( true );
        actions();


    }

    public FormLogin( String login, String senha )
    {

        setTitle( "Controle de Ligações Suporte" );
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        setSize( 500, 250 );
        setLocationRelativeTo( null );
        setResizable( false );
        
        this.login = login;
        this.senha = senha;
        this.loginAutomatico = true;

        

        validaUsuario();

    }

    public void iniciaComponentes()
    {

        pnlLogin = new JPanel();
        pnlLogin.setLayout( null );
        pnlLogin.add( new JLabel( new ImageIcon( getClass().getResource( "/img/img_login2.png" ) ) ) ).setBounds( 400, 20, 100, 100 );
        pnlLogin.add( new JLabel( "Login: " ) ).setBounds( 60, 50, 60, 25 );
        pnlLogin.add( new JLabel( "Senha: " ) ).setBounds( 60, 90, 60, 25 );
        pnlLogin.add( txtUsuario = new JTextField() ).setBounds( 130, 50, 265, 25 );
        pnlLogin.add( txtSenha = new JPasswordField() ).setBounds( 130, 90, 265, 25 );
        pnlLogin.add( btnLogar = new JButton( "Entrar" ) ).setBounds( 140, 140, 120, 30 );
        pnlLogin.add( btnCancelar = new JButton( "Sair" ) ).setBounds( 265, 140, 120, 30 );

        ImageIcon img_logar = new ImageIcon( getClass().getResource( "/img/img_entrar.png" ) );
        ImageIcon img_sair = new ImageIcon( getClass().getResource( "/img/img_sair2.png" ) );

        btnLogar.setIcon( img_logar );
        btnCancelar.setIcon( img_sair );



        pnlLogin.setVisible( true );
        add( pnlLogin );

    }

    public void actions()
    {

        btnLogar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                login = txtUsuario.getText();
                String s = txtSenha.getText();
                try
                {
                    senha = Md5.md5( s );
                } catch ( Exception e )
                {
                    JOptionPane.showMessageDialog( null, "Erro: " + e, "Mensagem", JOptionPane.ERROR_MESSAGE );
                    return;
                }
                validaUsuario();

            }
        } );

        btnCancelar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                dispose();
            }
        } );

        txtSenha.addKeyListener( new KeyListener()
        {

            public void keyTyped( KeyEvent e )
            {
            }

            public void keyPressed( KeyEvent e )
            {

                if ( e.getKeyCode() == 10 )
                {
                    login = txtUsuario.getText();
                    String s = txtSenha.getText();

                    try
                    {
                        senha = Md5.md5( s );
                    } catch ( Exception f )
                    {
                        JOptionPane.showMessageDialog( null, "Erro: " + f, "Mensagem", JOptionPane.ERROR_MESSAGE );
                        return;
                    }
                    validaUsuario();
                }
            }

            public void keyReleased( KeyEvent e )
            {
            }
        } );
    }

    public void validaUsuario()
    {

        String usuario = this.login;
        String senha = this.senha;
        String setor = "";
        String tipo_usuario = "";
        String nome = "";
        int sessoes = 0;
        int id = 0;

        Banco conn = new Banco();


        try
        {
            ResultSet rs = conn.selectLogin( usuario, senha );


            if ( rs.next() )
            {

                nome = rs.getString( "nome" );
                id = rs.getInt( "id" );
                tipo_usuario = rs.getString( "descricao" );
                setor = rs.getString( "setor" );

                if ( !tipo_usuario.equalsIgnoreCase( "Desativado" ) )
                {

                    ResultSet rs2 = conn.executarConsulta( "SELECT status FROM propriedades WHERE tipo = 'sessoes.acesso'" );

                    try
                    {
                        while ( rs2.next() )
                        {
                            sessoes = rs2.getInt( "status" );
                        }
                    } catch ( Exception g )
                    {
                        g.printStackTrace();
                    }
                    if ( sessoes == 0 || sessoes == id )
                    {

                        //Limpa as sessoes
                        Banco conn2 = new Banco();
                        conn2.executarAtualizacao( "DELETE FROM sessoes WHERE ref_usuario = "+ id );
                        conn2.fecha();

                        //FormPrincipal principal = new FormPrincipal( id, nome, tipo_usuario );
                        new WindowScreen( id, nome, tipo_usuario, usuario );
                        conn.executarAtualizacao( "UPDATE usuarios set ultimo_acesso = now() WHERE id = " + id + "" );

                        
                        dispose();

                    } else
                    {
                        JOptionPane.showMessageDialog( null, "As Sessões estão fechadas!" );
                        dispose();
                    }

                } else
                {

                    JOptionPane.showMessageDialog( this, "Esse usuário está desativado", "Mensagem", JOptionPane.WARNING_MESSAGE );

                    if ( loginAutomatico )
                    {
                        System.exit( 0 );
                    }

                    txtUsuario.setText( "" );
                    txtSenha.setText( "" );

                }


            } else
            {

//                new FormLogin();

                if ( !loginAutomatico )
                {
                    JOptionPane.showMessageDialog( this, "Usuario ou senha inválidos", "Mensagem", JOptionPane.WARNING_MESSAGE );
                    txtUsuario.setText( "" );
                    txtSenha.setText( "" );
                }
            }

        } catch ( Exception e )
        {
            JOptionPane.showMessageDialog( this, "Erro de Banco de Dados: \n \n" + e );
            if ( !loginAutomatico )
            {
                txtUsuario.setText( "" );
                txtSenha.setText( "" );
            }
        }

        conn.fecha();

    }
}
